home *** CD-ROM | disk | FTP | other *** search
/ Tech Arsenal 1 / Tech Arsenal (Arsenal Computer).ISO / tek-01 / ddj9304.zip / WAVELET.ZIP / DECOMP.L < prev    next >
Text File  |  1992-02-06  |  5KB  |  121 lines

  1.  
  2. Creation date: Tue Feb 04 16:29:44 1992    decomp.s    page 1
  3.  
  4.  
  5. Address    Instruction    Line #    Source line
  6.             1    #include "dsp_type.h"
  7.             1    #define DSP32 1
  8.             2    #if DSP32
  9.             3    #include "dspregs.h"
  10.             1    /* dspregs.h */
  11.             2    /* register file redefinition */
  12.             3    #define  r1e   r1
  13.             4    #define  r2e   r2
  14.             5    #define  r3e   r3
  15.             6    #define  r4e   r4
  16.             7    #define  r5e   r5
  17.             8    #define  r6e   r6
  18.             9    #define  r7e   r7
  19.             10    #define  r8e   r8
  20.             11    #define  r9e   r9
  21.             12    #define  r10e  r10
  22.             13    #define  r11e  r11
  23.             14    #define  r12e  r12
  24.             15    #define  r13e  r13
  25.             16    #define  r14e  r14
  26.             17    #define  r15e  r15
  27.             18    #define  r16e  r16
  28.             19    #define  r17e  r17
  29.             20    #define  r18e  r18
  30.             21    #define  r19e  r19
  31.             22    #define  r20e  r20
  32.             23    #define  r21e  r21
  33.             24    
  34.             25    /* integer and float redefinition */
  35.             26    #define  int24  int
  36.             27    #define  float24  float
  37.             4    #endif
  38.             5    
  39.             6    .global DECOMP
  40.             7            /*  DECOMP
  41.             8                perform recursive decomposition on non-terminating data sequence
  42.             9                registers used: r1 r2 r3 r4 r5 r6 r11 r12 r13 r14 r15 r16
  43.             10                accumulators used: a0 a1
  44.             11    
  45.             12                input: r1 - pointer to wavelet high-pass filter coefficients
  46.             13                       r2 - pointer to wavelet low-pass filter coefficients
  47.             14                       r6 - pointer to wavelet output data list
  48.             15                       r11 - jump address for proper filter length
  49.             16                       r12 - pointer to data pointer array
  50.             17                       r13 - pointer to stack
  51.             18                       r14 - return stack register, i.e. "TOP OF STACK"
  52.             19                       r15 - recursion counter
  53.             20                       r16 - filter coefficient pointer wrap back index
  54.             21            */
  55. 0000    1ea30197    22    DECOMP:   r3e = *r12++; /* load pointer to approx. input array source */
  56. 0004    1ea50190    23              r5e = *r12;   /* load pointer to approx. output array destination */
  57. 0008    002b0000    24              goto r11;     /* jump to appropriate filter processing for length */
  58. 000c    14830008    25              r4e = r3 + 8; /* set pointer to approx. input array destination */
  59. 0010    6003cf87    26    DT6:      a0 = a0 + *r3++ * *r1++; /* pass data through high-pass wavelet */
  60. 0014    6003cf87    27              a0 = a0 + *r3++ * *r1++; /* filter (a0 = 0.0 initially) */
  61. 0018    6003cf87    28    DT4:      a0 = a0 + *r3++ * *r1++; /* the destination of the jump depends */
  62. 001c    6003cf87    29              a0 = a0 + *r3++ * *r1++; /* upon the length of the wavelet */
  63. 0020    6003cf87    30    DT2:      a0 = a0 + *r3++ * *r1++; /* filter */
  64. 0024    002b001c    31              goto r11 + 28; /* jump to appropriate filter processing for length */
  65. 0028    60028d37    32              *r6++ = a0 = a0 + *r3++r16 * *r1++r16; /* output is detail point */
  66.  
  67.  
  68. Creation date: Tue Feb 04 16:29:45 199    decomp.s    page 2
  69.  
  70.  
  71. Address    Instruction    Line #    Source line
  72. 002c    4425cfa7    33    AT6:      a1 = a1 + (*r4++ = *r3++) * *r2++; /* pass data through low-pass */
  73. 0030    4425cfa7    34              a1 = a1 + (*r4++ = *r3++) * *r2++; /* filter (a1 = 0.0 initially) */
  74. 0034    4425cfa7    35    AT4:      a1 = a1 + (*r4++ = *r3++) * *r2++;
  75. 0038    4425cfa7    36              a1 = a1 + (*r4++ = *r3++) * *r2++;
  76. 003c    6425cf87    37    AT2:      a1 = a1 + *r3++ * *r2++;
  77. 0040    64248f87    38              a1 = a1 + *r3++ * *r2++r16;
  78. 0044    1a910001    39              r15 = r15 - 1;         /* check the recursion count */
  79. 0048    00a00084    40              if (eq) goto NO_RECUR; /* if true, recursion at bottom of tree */
  80. 004c    1be50004    41              r5e & 0x0004;          /* check for even/odd status */
  81. 0050    302000ae    42              *r5-- = a1 = a1;       /* save approx. data for next level */
  82. 0054    00800088    43              if (ne) goto CLEAN_UP; /* if true, await another data point */
  83. 0058    14850008    44              r4e = r5 + 8;          /* wrap output pointer back */
  84. 005c    1fa40197    45              *r12++ = r4e;          /* save wrapped pointer to approx. O/P */
  85. 0060    1fae01b6    46              *r13-- = r14e;         /* save return address to stack */
  86. 0064    34800007    47              a0 = a0 - a0;          /* clear the accumulators */
  87. 0068    11c00000    48              call DECOMP (r14);     /* recurse down the tree */
  88. 006c    30200007    49              a1 = a0;
  89.             52    #else
  90. 0070    15ad0002    53              r13 = r13 + 2;         /* align stack pointer to return address */
  91.             54    #endif
  92. 0074    1eae01b0    55              r14e = *r13;           /* pop the return address */
  93. 0078    00000000    56              nop;
  94. 007c    002e0000    57              return (r14);
  95. 0080    00000000    58              nop;
  96.             59    
  97. 0084    302000b0    60    NO_RECUR: *r6 = a1 = a1;         /* save approx. coeff. as next value */
  98. 0088    002e0000    61    CLEAN_UP: return (r14);
  99. 008c    1fa50197    62              *r12++ = r5e;          /* save unwrapped pointer to approx. output */
  100.             63            /* END OF DECOMP */
  101.  
  102.  
  103. d3as:warning:decomp.s line 32: branch dest can't start with CAU reg store inst
  104. d3as:warning:decomp.s line 32: Use output pointer reg only as output pointer in
  105.          DAU inst at dest after branch instruction
  106.  
  107.  
  108.  
  109. Symbol Table
  110. .file    decomp.s
  111. .bank0    (section 1)    size 0x90
  112. DT2    section 1    defined    value 0x20
  113. DT4    section 1    defined    value 0x18
  114. DT6    section 1    defined    value 0x10
  115. DECOMP    section 1    global    defined    value 0x0
  116. AT2    section 1    defined    value 0x3c
  117. AT4    section 1    defined    value 0x34
  118. AT6    section 1    defined    value 0x2c
  119. CLEAN_UP    section 1    defined    value 0x88
  120. NO_RECUR    section 1    defined    value 0x84
  121.